/*
 * Nombre: DAOHorario.java
 * Version: 1.0.0
 * Diagrama: GAPI v5.3.0
 * Autor: Alonso Fabian Orozco Perez
 * Creado: 23-febrero-2013
 * Caso de uso: MGOA1,2,3,4,5
 * Modificado: 25-febrero-2013 (Amado Cante)
 */

package DAO;

import AccesoBD.AccesoBaseDatos;
import Dominio.FragmentoHorario;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

/**
 * @author Luis J
 * Description: Clase que se encarga de realizar la conexion y la
 * administracion de la tabla de horarios dentro de la base de datos.
 * Date: 24/02/2013
 */
public class DAOHorario {
    
    public final String TABLA_HORARIO = "horarios";
    public final String COLUMNA_CLAVE_HORARIO = "claveHorario";
    public final String COLUMNA_DIA = "dia";
    public final String COLUMNA_HORA_INICIO = "horaInicio";
    public final String COLUMNA_HORA_FIN = "horaFin";
    public final String COLUMNA_AULA = "aula";
    public final String COLUMNA_CLAVE_ASIGNATURA_O_A = "clave_asig_o_a";
    private Connection conexion = null;
    private AccesoBaseDatos acceso = new AccesoBaseDatos();
    /**
     * Constructor que inicializa la conexion con la base de datos.
     */    
    public DAOHorario(){
        this.conexion = this.acceso.abrirConexion();
    }
    /**
     * Cierra la conexion en la base de datos.
     */
    public void cerrarConexionAHorario() {
        acceso.cerrarConexion(conexion);
    }
    /**
     * Busca todos los horarios y los ingresa en un arreglo de horarios.
     * @param claveAsignaturaOferta La clave de la oferta academica
     * @return Arreglo de Horarios.
     */
    public ArrayList<FragmentoHorario> buscarTodosLosHorarios(int claveAsignaturaOferta){
        String queryBusqueda = "SELECT * FROM "+TABLA_HORARIO+ " WHERE " + COLUMNA_CLAVE_ASIGNATURA_O_A + " = " + claveAsignaturaOferta;
        try {
            Statement sentencia = acceso.crearSentenciaBD(conexion);
            ResultSet resultado = sentencia.executeQuery(queryBusqueda);
            resultado.last();
            int resultSetSize = resultado.getRow();
            if(resultSetSize > 0){
                ArrayList<FragmentoHorario> listaHorarios = new ArrayList<FragmentoHorario>();
                resultado.first();
                while(resultado.getRow() != 0){//Mientras no se llegue a la ultima linea
                    FragmentoHorario actual = new FragmentoHorario();
                    actual.setClaveFragmentoHorario(resultado.getInt(1));
                    actual.setDiaSemana(resultado.getString(2));
                    actual.setHoraInicio(resultado.getString(3));
                    actual.setHoraFin(resultado.getString(4));
                    actual.setAula(resultado.getString(5));
                    listaHorarios.add(actual);
                    resultado.next();
                }
                resultado.close();
                return listaHorarios;
            }else{
                return new  ArrayList<FragmentoHorario> ();
            }
        } catch (SQLException ex) {
            System.err.println("Problemas de SQL:\n"+ex.toString());
            return new  ArrayList<FragmentoHorario> ();
        }
    }
    /**
     * Registra un horario en la base de datos.
     * @param claveAsignaturaOferta La clave de la asignatura de la oferta academica
     * @param horario El objeto horario a registrar
     */
    public void registrarHorario(int claveAsignaturaOferta, FragmentoHorario horario){
        try {
           
                String dia = horario.getDiaSemana();
                String horaInicio = horario.getHoraInicio();
                String horaFin = horario.getHoraFin();
                String aula = horario.getAula();

                Statement sentencia = acceso.crearSentenciaBD(conexion);
                String queryInsertar = "INSERT INTO " + TABLA_HORARIO + " ("
                        + COLUMNA_DIA +","
                        + COLUMNA_HORA_INICIO +","
                        + COLUMNA_HORA_FIN +","
                        + COLUMNA_AULA +","
                        + COLUMNA_CLAVE_ASIGNATURA_O_A
                        + ") VALUES ('"
                        +dia+"','"
                        +horaInicio+"','"
                        +horaFin+"','"
                        +aula+"',"
                        +claveAsignaturaOferta+")";

                sentencia.executeUpdate(queryInsertar);
            
        } catch (SQLException ex) {
            System.out.println("Ocurrió un problema al tratar de registrar el Horario");
        }
    }
    /**
     * Elimina un horario registrado en la base de datos.
     * @param claveHorario La clave del horario a eliminar.
     */
    public void eliminarHorario(int claveHorario) {
    try {
            Statement sentencia = acceso.crearSentenciaBD(conexion);
            String deleteQuery = "DELETE FROM " + TABLA_HORARIO + " WHERE " + COLUMNA_CLAVE_HORARIO + " = '" + claveHorario + "'";
            sentencia.executeUpdate(deleteQuery);
        } catch (SQLException ex) {
            System.out.println("Ocurrió un problema al tratar de eliminar el Horario");
        }
    }
    /**
     * Elimina un horario de la asignatura.
     * @param claveAsignatura La clave de la asignatura registrada.
     */
    public void eliminarHorarioPorAsignatura(int claveAsignatura) {
    try {
            Statement sentencia = acceso.crearSentenciaBD(conexion);
            String deleteQuery = "DELETE FROM " + TABLA_HORARIO + " WHERE " + COLUMNA_CLAVE_ASIGNATURA_O_A + " = '" + claveAsignatura + "'";
            sentencia.executeUpdate(deleteQuery);
        } catch (SQLException ex) {
            System.out.println("Ocurrió un problema al tratar de eliminar el Horario");
        }
    }
    /**
     * Actualiza la informacion de un horario.
     * @param claveHorario La clave del horario.
     * @param horario El objeto horario con la nueva informacion.
     */
    public void actualizarHorario(int claveHorario, FragmentoHorario horario) {
        try {
            Statement sentencia = acceso.crearSentenciaBD(conexion);
            String queryUpdate = "UPDATE " + TABLA_HORARIO + " SET "
                    + COLUMNA_CLAVE_HORARIO + " = '" + horario.getClaveFragmentoHorario() + "' ,"
                    + COLUMNA_DIA + " = '" + horario.getDiaSemana() +"' ,"
                    + COLUMNA_HORA_INICIO + " = '" + horario.getHoraInicio() +"' ,"
                    + COLUMNA_HORA_FIN + " = '" + horario.getHoraFin() +"' ,"
                    + COLUMNA_AULA + " = '" + horario.getAula() +"' "
                    + " WHERE " + COLUMNA_CLAVE_HORARIO+ " = '" + claveHorario + "'"
                    + ";";
            sentencia.executeUpdate(queryUpdate);
        } catch (SQLException ex) {
            System.out.println("Ocurrió un problema al tratar de actualizar los datos del Horario");
        }
    }
}
